*&---------------------------------------------------------------------*
*& Report ZEX_LISTING_111                                              *
*&---------------------------------------------------------------------*
*& Created By: James Wood (james.wood@bowdarkconsulting.com)           *
*& Created On: 12/12/2008                                              *
*& Purpose:    This program shows how to create a person entity using  *
*&             the ABAP Persistence Service.                           *
*&---------------------------------------------------------------------*
REPORT zex_listing_111.

*----------------------------------------------------------------------*
* START-OF-SELECTION Event Module                                      *
*----------------------------------------------------------------------*
START-OF-SELECTION.
  PERFORM create_person.

*&---------------------------------------------------------------------*
*&      Form  create_person
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM create_person.

* Local Data Declarations:
  DATA: lr_address_agent TYPE REF TO zca_os_address,
        lr_address       TYPE REF TO zcl_os_address,
        lr_person_agent  TYPE REF TO zca_os_person,
        lr_person        TYPE REF TO zcl_os_person.

* Create a new person entity:
  TRY.
*   First, create an address instance:
    lr_address_agent = zca_os_address=>agent.
    CALL METHOD lr_address_agent->create_persistent
      EXPORTING
        i_city         = 'Mos Eisley'
        i_country      = 'TAT'
        i_phone_number = '999-555-5555'
        i_postal_code  = '99999-9999'
        i_region       = 'SKY'
        i_street1      = '123 Millennium Falcon Way'
      RECEIVING
        result         = lr_address.

*   Next, create a person instance:
    lr_person_agent = zca_os_person=>agent.
    CALL METHOD lr_person_agent->create_persistent
      EXPORTING
        i_address    = lr_address
        i_name_first = 'Andersen'
        i_name_last  = 'Wood'
      RECEIVING
        result       = lr_person.

*   Must execute COMMIT WORK to persist the objects:
    COMMIT WORK.
  CATCH cx_os_object_existing.
    "Not used...
  ENDTRY.

ENDFORM.                    "create_person